arch ?= arm
modname ?= 
appname ?= main
currentDir := $(shell pwd)

CROSS_COMPILE ?=

install_path ?= ~/rootfs/TempDir

# 生成x86架构下的文件用于测试用时 请把myhead_for_driver.h里的内容拷贝到源代码处 并不加这个头文件

# 注:如果当前版本小于等于5.4(linux内核版本) 就不需要给这个变量赋值 只需要把生成的Module.symvers文件传到引用这个
# 向量表的地方即可 否则的话 这个向量表不要移动 就放在原路径 赋值到KBUILD_EXTRA_SYMBOLS即可 也就是要参照
# Module.symvers里的一部分信息来填写KBUILD_EXTRA_SYMBOLS此变量
ifeq ($(arch),arm)
	LinuxDir := /home/linux/linux-5.10.61
	
	# KBUILD_EXTRA_SYMBOLS := 填写生成的符号表Module.symvers的绝对路径  
	# 外面传参也可以 如果使用多个Module.symvers的话 可以通过空格将多个路径分开或用+=追加赋值
	
	CROSS_COMPILE := arm-linux-gnueabihf-
else 
	LinuxDir := /lib/modules/$(shell uname -r)/build

	# KBUILD_EXTRA_SYMBOLS := 填写生成的符号表Module.symvers的绝对路径
endif

CC := $(CROSS_COMPILE)gcc

all:
	make -C $(LinuxDir) M=$(currentDir) modules 
	# $(CC) $(appname).c -o $(appname) -I /usr/include
install:
	# make  -C $(KERNELDIR) M=$(PWD) modules_install INSTALL_MOD_PATH=/home/linux/rootfs
	# cp *.ko $(appname) $(install_path)
# endif
	# cp *.ko $(appname) $(install_path)
	cp $(modname).ko $(install_path)
clean:
	make -C $(LinuxDir) M=$(currentDir) clean
	# rm $(appname)
help:
	@echo 'compile usage:'
	@echo 'Usage: make arch=arm/x86 modname=file_name all'
	@echo 'If appname is not main,pls input appname=xxx'
# 必须填写你需要进行模块化编译的.c文件的前缀 也就是demo.c的话 得+=demo.o 也就是外面传参modname=demo即可
obj-m += $(modname).o